////////////////////////////////////////////////////////////
/// Wrap the variable _Var from _Begin to _End
////////////////////////////////////////////////////////////
template <typename T>
T Wrap( T _Var, T _End, T _Begin ) {
    if ( _Var >= _Begin && _Var < _End  ) {
        return _Var;
    } else if ( _Var >= _End ) {
        // eg. _Var = 13, _End = 10, _Begin = 2 => return 5
        return _Var + _Begin - _End;
    } else { 
        // _Var < _Begin
        // eg. _Var = 0, _End = 10, _Begin = 2 => return 8
        return _Var +  _End - _Begin;
    }
}

////////////////////////////////////////////////////////////
/// Clamp the variable from _Begin to _End
////////////////////////////////////////////////////////////
template <typename T>
T Clamp( T _Var, T _Begin, T _End ) {
    if ( _Var <= _Begin ) {
        return _Begin;
    } else if ( _Var >= _End ) {
        return _End;
    } else {
        return _Var;
    }
}